<?php

include_once '../models/Factura.php';
include_once '../models/Orden.php';
include_once '../models/ConceptoContable.php';
include_once '../models/Nota.php';
include_once '../models/Entrega.php';
include_once '../views/notas/listarTodasNotas.php';
include_once '../models/PagoFactura.php';

class ctlNotas {
    
    public function __construct($paramForm) {

        error_reporting(E_ERROR | E_WARNING | E_PARSE);

        switch ($paramForm['opcCtl']) {
            case 1: $this->registrarNota($paramForm);
                break;
            
            case 2: $this->listarTodasNotas();
                break;
        }
    }
    
    public function listarTodasNotas() {
        
        $notas = new Nota(null, null, null, null, null);
        
        $notas = $notas->getAllNotas();
        
        new ListarTodasNotas($notas);
    }


    public function registrarNota ($paramForm) {
        
        if ($paramForm['idCliente'] != 0) {

            //Obtenemos los datos de la nota y creamos un objeto de tipo nota
            $nuevaNota = new Nota($paramForm['idCliente'], 'C', $paramForm['fechaEmision'], $paramForm['numNota'], 
                    ($paramForm['cancelada'] == 'no' ? 0 : 1 ));
            
            //Registramos la Nota
            $nuevaNota->registrar($nuevaNota);
            //Obtenemos el ID de la Nota
            $idNota = $nuevaNota->obtenerIdNota($paramForm['numNota']);

            $monto = 0;

            //Recorremos las ordenes de la nota
            for ($i = 1; $i <= $paramForm['totalConceptos']; $i++) {

                //Obtenemos los ID's de las ordenes que se relacionan con la Nota
                $idOrden = "idOrden" . $i;
                

                //Verificamos que en esta posición se haya selecionado una ORDEN 
                //-1 = Selecione una orden-modelo
                if ($paramForm[$idOrden] != -1) {

                    //Insertamos el ConceptoContable
                    $nuevoConcepNota = new ConceptoContable($paramForm[$idOrden], $paramForm["unidades".$i], $paramForm["precio".$i], $paramForm["descr".$i]);
                    $nuevoConcepNota->setIdNota($idNota);
                    $nuevoConcepNota->registrarParaNota($nuevoConcepNota);
                    
                    //Si el usuario marca el conceto como faltante y si la nota NO es cancelada, registramos la entrega (faltante), 
                    //el IDORDEN NO tiene que ser 0
                    if (($paramForm[$idOrden] != 0) && ($paramForm["faltante".$i] == 1) && ($paramForm["cancelada"] == 'no')) {
                        //Recuperamos el ID del CoceptoContable
                        $idConcepto = $nuevoConcepNota->getIdByIdNotaIdOrdCantPrec($nuevoConcepNota);
                        
                        //Si el IDCONCEPTO es diferente de cero entonces continumos
                        if ($idConcepto != 0) {
                            
                            //Creamos la entrega
                            $nuevaEntrega = new Entrega($nuevoConcepNota->getIdOrden(), $idConcepto, $nuevoConcepNota->getCantidad(), $paramForm['fechaEmision'], 'F');

                            //Registramos le entrega
                            $nuevaEntrega->registrar($nuevaEntrega);
                            
                            //Ahora verificamos si a la orden ya se le entregarón todas las prendas
                            $orden = new Orden(null, null, null, null, null, null);
                            $cantPrendas = $orden->getCantPrendas($paramForm[$idOrden]);
                            
                            //Aquí cambiamos el estado si es las prendas ENTREGADAS ya superan las PRENDAS por Orden
                            if ($nuevaEntrega->getEntregadas($paramForm[$idOrden]) >= $cantPrendas) {
                                $orden->setEstado($paramForm[$idOrden], 'T');
                                
                                /***
                                 * POSTERIORMENTE PONER LAS ORDENES QUE YA SE TERMIANRON DE ENTREGAR CON ESTA FACTURA
                                 */
                            }
                        
                        }
                    }

                    //Añadimos al montoTotal de la Nota la cantidad (precio * unidades) de ese CONCEPTO 
                    $monto += ($paramForm["unidades".$i] * $paramForm["precio".$i]);
                }
            }

            //Asignamos el monto a la Nota
            $nuevaNota->setMontoNota($idNota, $monto);
            
            if ($paramForm["cancelada"] == 'no') {
                
                $fac = new Factura(null, null, null, null);
                
                $fac->abonarCantidadAFactu($paramForm['idCliente'], round( ($monto * 1.16), 2, PHP_ROUND_HALF_DOWN), 'N', $idNota);
            }

            echo "<h1>Se ha registrado la Nota</h1>";
        } else {
            echo "<h1>Seleccione un cliente</h1>";
        }
    }
}

new ctlNotas($_GET);

?>